'''
Created on 09/05/2013

@author: jean
'''
from pm.database import db
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
from pm.models.Relaciones import Relaciones
from pm.models.TipoItem import TipoItem

class Items(db.Model):
    
    '''
        Clase que representa los atributos los items
    '''
    __tablename__ = 'items'
    
    id_item = db.Column(db.Integer, primary_key=True, nullable=False)
    '''
           PrimaryKey de la tabla
     '''
    numero = db.Column(db.Integer, nullable=False)
    '''
        numero del Item dentro de la fase
    '''
    nombre = db.Column(db.String(50), nullable=False)
    '''
       Nomber del item
    '''
    estado = db.Column(db.Integer, nullable=False)
    '''
       Estado del Item
    '''
    id_tipo_item = db.Column(db.Integer, ForeignKey('tipo_item.id_tipo_item'),nullable=False)
    '''
       El tipo de Item al cual pertenece el item
    '''
    id_fase = db.Column(db.Integer, ForeignKey('fases.id_fase'),nullable=False)
    '''
       Fase a la que pertenece el item
    '''
    version = db.Column(db.Integer,nullable=False)
    '''
       version que tiene el item
    '''
    complejidad = db.Column(db.Integer, nullable = False)
    """
        Complejidad del item
    """
    descripcion= db.Column(db.String(500), nullable=False)
    """
        Breve descripcion del tipo de item
    """
    observacion= db.Column(db.String(500), nullable=True)
    """
        Breve observacion del tipo de item
    """
    prioridad = db.Column(db.Integer,nullable=False)
    """
        Prioridad del item indicado
    """
    id_linea_base = db.Column(db.Integer,nullable=True)
    """
        linea base a la que pertenece
    """
    destinos= relationship("Relaciones", primaryjoin=id_item==Relaciones.id_origen, backref="origenes")
    origenes= relationship("Relaciones",  primaryjoin=id_item==Relaciones.id_destino, backref="destinos")
    
    
    costo= db.Column(db.Integer,nullable=True)
    """
        costo de la realizacion del item mencionado
    """
    
    
    def __init__(self, numero, nombre,estado, id_tipo_item,id_fase,version, complejidad, descripcion, observacion, prioridad, id_linea_base,costo):
        '''
        @param numero: Numero del Item dentro de la fase
        @param nombre: Nombre del Item
        @param estado: estado del item
        @param id_tipo_item: tipo del item
        @param id_fase: fase a la que pertenece el item
        @param version: version del item
        @param complejidad: complejidad del item
        @param descripcion: descripcion del item
        @param observacion: anotaciones sobre el item
        @param prioridad: prioridad del item
        @param id_linea_base: linea base a la que pertenece el item
        @param costo: costo de realizacion del item en cuestion 
        '''
        self.numero = numero
        self.nombre = nombre
        self.estado = estado
        self.id_tipo_item = id_tipo_item
        self.id_fase = id_fase
        self.version = version
        self.complejidad = complejidad
        self.descripcion = descripcion
        self.observacion = observacion
        self.prioridad = prioridad
        self.id_linea_base = id_linea_base
        self.costo= costo
        
    def __json__(self):
        '''
         devuelve el json que representa a Items
        '''
        if self.estado==1:
            estado="Desaprobado"
        if self.estado==2:
            estado="Aprobado"
        if self.estado==3:  
            estado= "Cerrado"
        if self.estado==4:
            estado="Revision-Desbloq"
        if self.estado==5:
            estado="Revision-Bloq"
        if self.estado==6:  
            estado= "Eliminado"
            
        tipoItem = TipoItem.query.filter(TipoItem.id_tipo_item == self.id_tipo_item).first()
        return {'id':self.id_item, 
                'numero': self.numero, 
                'nombre': self.nombre,
                'estado': estado,
                'id_tipo_item': tipoItem.codigo,
                'id_fase': self.id_fase,
                'version': self.version,
                'complejidad': self.complejidad,
                'descripcion': self.descripcion,
                'observacion': self.observacion,
                'prioridad': self.prioridad,
                'id_linea_base': self.id_linea_base,
                'costo': self.costo
                }
        
def crearNombreItem (numeroProyecto,numeroFase, numeroItem):
    resp = "PR" + str(numeroProyecto) + "-F" + str(numeroFase) + "-I" + str(numeroItem)
    return resp